package bookz

import scala.collection.jcl.ArrayList
import java.io._;
import scala.io._;

import scala.util._;

class TitleGenerator() {
  
  val patternList = Source.fromFile("titles.txt").getLines.toList
  
  def generateFor(langName: String) : String  = {
    
//    Semplice replace java
    pickRandomTitle.replaceAll("\\$", langName);

//    con la reduceLeft
//    List.fromString(pickRandomTitle, ' ')
//      .map(t => {
//        t match {
//          case "$" =>
//            langName + " "
//          case _ => t + " "
//        }        
//      }).reduceLeft(_+_)

//  con la foldLeft
//	List.fromString(pickRandomTitle, ' ')
//	.foldLeft("")(concat)

//  esoteric syntax for foldLeft
//  ("" /: List.fromString(pickRandomTitle, ' '))(concat)

//	  perche' questo non funziona ??? volevo fare l'inline della funzione "concat"
//    List.fromString(pickRandomTitle, ' ')
//     .foldLeft("")(tot: String, it: String) : String => tot + it + " "

//    se non faccio l'inline della funzione concat e' un casino!
//    perche' langName dentro concat non e' piu' visibile e non
// 	  e non so se ci sia qualche trucco per passare una funzione
//    con 3 parametri alla foldLeft senza che questa si arrabbi.
//    Il trucco ovviamente sarebbe quello usato con la reduce:
//    prima faccio i replace e poi faccio il concat, che in generale
//    e' anche piu' corretto, ma mi resta il dubbio se sia possibile
//    farlo
  }

  def concat(tot: String, it: String): String = {
    tot + it + " "
  }
  

  def pickRandomTitle =
    patternList(new Random().nextInt(patternList.length))
}
